Code analysis programs are designed to analyze the source code of a program and to identify possible program defects that are contained in the code. Many code analysis programs perform this analysis without actually executing the code. The results of code analysis programs are often stored and displayed to users in an unstructured string format, such as the example shown below:                “The following stack leads to a call to DoSomethingDangerous(input, details) where input is smaller than 5 and details is smaller than 7:        Demo(input, details): line 5                    Demo2(input, details): line 13                            Demo3(input, details): line 18                                                Please review this stack for potential issues related to < . . . >”        
In the above example, the format is unstructured because it is not easy to identify the particular pieces of information that are contained within the message. A user who is provided with such analysis information must interpret the information and manually review the source code associated with the information mentioned in the message. This often involves trying to track down the path that led to the particular call being displayed in the message. This manual process of analyzing the results and tracking down the sources can be very tedious.